Compactando / descompactando arquivos simultaneamente [Melhorado]

Publicado por Sandro Marcell 18/07/2007

[ Hits: 6.433 ]

Homepage: http://sanmarcell.wordpress.com

Download descom.sh




Este script compacta/descompacta arquivos simultaneamente, sem necessidade de parâmetros extras.

Ex.: nome_script arq.txt arq.pdf arq.gz arq.tar.gz

Os arquivos arq.txt e arq.pdf serão compactados; já os arquivs arq.gz e arq.tar.gz serão descompactados.

Está é a versão Shell Bash de um script Tcl que postei aqui no VOL.

Falou!!!

  



Esconder código-fonte

#!/bin/bash
#
# Compacte/descompacte arquivos simultaneamente.
# (Versão Shell Bash)
#
# Autor: Sandro Marcell (sandro_marcell@yahoo.com.br)
#
# Uso: nome_script arquivo1 [arquivoN]
#
# Obs.:
# É possível o uso do metacaractere (*)
# São necessários os programas: tar, gzip e bzip2

# Realçando saída do comando 'echo':
Echo () { echo -e "\e[1m$*\e[m" ; }

# Checando parâmetros:
[ -z $BASH_ARGC ] && Echo "Uso: $(basename $0) arquivo1 [arquivoN]" && exit

# Simples avisos:
Aguarde () { Echo "Descompactando..." ; sleep 1 ; }
Aguarde2 () { Echo "Compactando..." ; sleep 1 ; }

# Arquivo de log:
LOG=/tmp/$(basename $0)-$USER.log

# Função que testa código de retorno:
Testando () {
   [ $? == 0 ] && Echo "Arquivo descompactado!" \
   || Echo "-> Erro! Mais detalhes em $LOG"
}

# Início do loop:
for A ; do

   # Testes condicionais:
   [ ! -e $A ] && Echo "-> Arquivo não encontrado." && continue
   [ ! -O $A ] && Echo "-> Acesso negado." && continue

   # Compactar ou descompactar?
   case $A in
      # Descompactando...
      *.tar.gz | *.tgz)
      Aguarde
      tar -zxf $A 2>> $LOG
      Testando $? 
      ;;
      
      *.gz)
      Aguarde
      gunzip $A 2>> $LOG
      Testando $?
      ;;
      
      *.tar.bz2 | *.tbz)
      Aguarde
      tar -jxf $A 2>> $LOG
      Testando $?
      ;;

      *.bz2)
      Aguarde
      bunzip2 $A 2>> $LOG
      Testando $?
      ;;

      *)
      # Compactando...
      [ -d $A ] && {
      Aguarde2
      tar -czf $A.tar.gz $A 2>> $LOG
      [ $? == 0 ] && Echo "Diretório compactado!" \
      || Echo "-> Erro! Mais detalhes em $LOG"
   } || {
   Aguarde2
   gzip -f9 $A 2>> $LOG
   [ $? == 0 ] && Echo "Arquivo compactado!" \
   || Echo "-> Erro! Mais detalhes em $LOG"
}
;;
esac
done
#Fim

Scripts recomendados

Configurador de Rede Debian

MPlayer em modo texto com desligamento programado do sistema

Mover arquivos conforme nomenclatura

Atualiza os pacotes do seu pc

Nome, Uid, Gid, HomeUsuario


  

Comentários
[1] Comentário enviado por xerxeslins em 22/11/2008 - 22:47h

Que maravilha, hein?!

Já está nos favoritos. Isso evita muita dor de cabeça.
Gostei muito do seu script.
Parabéns!

[2] Comentário enviado por vitinho217 em 24/06/2014 - 09:34h

Valeu cara, script show de bola !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts